#include "myopengl.h"
#include <QOpenGLWidget>
#include <QOpenGLFunctions_4_5_Core>
Myopengl::Myopengl(QWidget *parent)
    : QOpenGLWidget{parent}
{



}

void Myopengl::initializeGL()
{
    //这里边是初始化操作
    initializeOpenGLFunctions();


    //给VAO VBO绑定编号,给对象赋予id
    glGenBuffers(1,&VBO);
    glGenVertexArrays(1,&VAO);//这是一个顶点缓冲对象，有很多缓冲对象类型
    ///允许同时绑定多个缓冲，但是需要是不同类型的缓冲

    //将新创建的VBO对象绑定到缓冲区上
    glBindVertexArray(VAO);
    glBindBuffer(GL_ARRAY_BUFFER,VBO);

    //使用VBO初始化缓冲区
    // /
    // / \brief glBufferData
    // /第四个参数指定了我们希望显卡如何管理给定的数据。它有三种形式：
    // GL_STATIC_DRAW ：数据不会或几乎不会改变。
    // GL_DYNAMIC_DRAW：数据会被改变很多。
    // GL_STREAM_DRAW ：数据每次绘制时都会改变。
    glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);

    //告诉显卡如何解析缓冲区VBO里的属性值，VAO第0个属性的相关设置
    glVertexAttribPointer(0,3,GL_FLOAT,FALSE,3*sizeof(float),(void*)0);//0是偏移量
    //开始VAO的第一个属性值
    glEnableVertexAttribArray(0);

    //将VAO VBO释放
    glBindBuffer(GL_ARRAY_BUFFER,0);
    glBindVertexArray(0);


}

void Myopengl::resizeGL(int w, int h)
{

}

void Myopengl::paintGL()
{
    //状态设置函数
    glClearColor(0.3,0.3,0.3,0.3);
    //状态使用函数
    glClear(GL_COLOR_BUFFER_BIT);

    //glDrawArrays函数第一个参数是我们打算绘制的OpenGL图元的类型。
    //由于我们在一开始时说过，我们希望绘制的是一个三角形，这里传递GL_TRIANGLES给它。
    //第二个参数指定了顶点数组的起始索引，我们这里填0。
    //最后一个参数指定我们打算绘制多少个顶点，这里是3（我们只从我们的数据中渲染一个三角形，它只有3个顶点长）。
    //
    glBindVertexArray(VAO);
    glDrawArrays(GL_TRIANGLES,0,3);


}
